#include <cstdio>
#include <cstring>

const int N = (1 << 20) + 1;
int n, R, P, S;
int cop[3] = {1, 2, 0}, buk[3];
char ch[3] = {'P', 'R', 'S'}, str[N];

void work(int i, int l, int r) {
  if (l == r) return (void)(str[l] = ch[i]);
  int mid = (l + r) >> 1;
  work(i, l, mid);
  work(cop[i], mid + 1, r);
}

inline void mswap(char* a, char* b) {
  char tmp = *a;
  *a = *b;
  *b = tmp;
}

inline void swap(char* l, char* mid) {
  char* tmp = mid;
  while (l < tmp) mswap(l++, mid++);
}

inline bool check(int l, int r) {
  int mid = (l + r) >> 1, len = mid - l + 1;
  for (int i = l; i <= mid; ++i) {
    if (str[i] > str[i + len]) return true;
  }
  return false;
}

void solve(int l, int r) {
  if (l == r) return;
  int mid = (l + r) >> 1;
  solve(l, mid), solve(mid + 1, r);
  if (check(l, r)) swap(str + l, str + mid + 1);
}

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("testdata.in", "r", stdin);
  freopen("testdata.out", "w", stdout);
#endif
#ifndef LOCAL
  freopen("rps.in", "r", stdin);
  freopen("rps.out", "w", stdout);
#endif
#endif

  scanf("%d%d%d", &R, &P, &S);
  n = R + P + S;
  bool flag = false;
  for (int i = 0; i < 3; ++i) {
    memset(buk, 0, sizeof(buk));
    flag = false;
    work(i, 1, n);
    for (int j = 1; j <= n; ++j) {
      if (str[j] == 'P')
        buk[0]++;
      else if (str[j] == 'R')
        buk[1]++;
      else
        buk[2]++;
    }
    if (buk[0] == P && buk[1] == R && buk[2] == S) {
      flag = true;
      break;
    }
  }
  if (!flag) return puts("IMPOSSIBLE"), 0;
  solve(1, n);
  printf("%s", str + 1);
  return 0;
}